package Homework;
//会员业务类

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

public class MemberDao {
	
	//创建一个会员集合
	private List<Member> memberList=new ArrayList<Member>();
	//创建一个扫描器
	private Scanner scanner=new Scanner(System.in);
	
	//初始化会员集合中的数据---通过构造代码块
	{
		memberList.add(new Member("张三", "19827636549", "00000001", "123456", 100, "2020-11-04"));
		memberList.add(new Member("李四", "17831137251", "00000002", "123456", 112, "2020-11-04"));
		memberList.add(new Member("王五", "18729187546", "00000003", "123456", 135, "2020-11-04"));
		memberList.add(new Member("赵六", "18930467701", "00000004", "123456", 78, "2020-11-04"));
	}
	Member member=null;
	//创建一个方法用于启动方法
	public void start() {
		//用循环可以让用户循环操作
		while (true) {
			System.out.println("**********欢迎进入超市会员管理系统！**********");
			System.out.println("1.积分查询\n2.积分累加\n3.积分兑换\n4.修改密码\n5.注册会员\n6.退出系统");
			System.out.print("请选择：");
			int choice=scanner.nextInt();
			switch (choice) {
			case 1:
				System.out.println("您选择了积分查询！");
				//调用hasMember方法，先判断该会员是否存在
				member=hasMember();
				if(member!=null) {
					System.out.println(member.toString());
				}else {
					System.out.println("会员卡号或密码输入有误！");
				}
				continue;
			case 2:
				System.out.println("您选择了积分累加！");
				//先调用hasMember方法，判断会员是否存在
				member=hasMember();
				if(member!=null) {
					System.out.print("请输入您要累加的积分：");
					int scoreAdd=scanner.nextInt();
					member.setScore(member.getScore()+scoreAdd);
					System.out.println("积分累加成功！");
					System.out.println("您当前的积分为："+member.getScore());
				}else {
					System.out.println("该会员不存在！");
				}
				continue;
			case 3:
				System.out.println("您选择了积分兑换！");
				if((member=hasMember())!=null) {
					System.out.print("请输入您要兑换的积分：");
					int scoreCost=scanner.nextInt();
					//判断用户要兑换的积分是否超过现有的积分
					if(scoreCost>member.getScore()) {
						System.out.println("您要兑换的积分不能超过现有的积分！");
					}else {
						System.out.println("积分兑换成功！\n您的积分兑换了"+(scoreCost/100.0)+"元！");
						System.out.println("您剩余的积分为："+(member.getScore()-scoreCost));
					}
				}else {
					System.out.println("该会员不存在！");
				}
				continue;
			case 4:
				System.out.println("您选择了修改密码！");
				//如果用户输入错误，可以让用户重新输入，不用从头选择
				boolean flag=true;
				while(flag) {
					if((member=hasMember())!=null) {
						System.out.print("请输入新密码：");
						String password1=scanner.next();
						System.out.print("请再次确认密码：");
						String password2=scanner.next();
						if(password1.equals(password2)) {
							member.setPassword(password1);
							System.out.println("密码修改成功！");
							flag=false;
						}else {
							System.out.println("两次输入的密码不一致，请重新输入！");
						}
					}else {
						System.out.println("该会员不存在！");
					}
				}
				continue;
			case 5:
				System.out.println("您选择了注册会员！");
				//创建一个会员注册方法
				registerCard();
				continue;
			case 6:
				System.out.println("您选择了退出系统！");
				System.out.println("欢迎您下次光临！");
				break;
			default:
				System.out.println("输入有误，请重新输入！");
				continue;
			}
			//switch-case外面放break表示while循环结束
			break;
		}
	}
	
	//会员注册方法
	private void registerCard() {
		//先创建一个会员
		Member memberReg=new Member();
		//提示用户输入
		System.out.print("请输入您的姓名：");
		memberReg.setName(scanner.next());
		System.out.print("请输入您的手机号：");
		memberReg.setPhoneNum(scanner.next());
		System.out.print("请设置6位数的密码：");
		//输入的密码为int类型，再转为string类型
		int passwordInt1=scanner.nextInt();
		String password1=Integer.toString(passwordInt1);
		System.out.print("请再次确认密码：");
		int passwordInt2=scanner.nextInt();
		String password2=Integer.toString(passwordInt2);
		//先判断密码是否为6位数
		if(password1.length()!=6) {
			System.out.println("'密码格式输入错误，请重新输入！");
		}else {
			//在密码是6位数的前提下，判断两雌密码是否一致
			if(password1.equals(password2)) {
				//将密码传给该会员对象
				memberReg.setPassword(password1);
				//设置该会员的积分
				memberReg.setScore(100);
				//设置会员注册的日期
				String registerDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
				memberReg.setRegisterDate(registerDate);
				//判断该会员是否为第一个注册的会员
				if (memberList.size()==0) {
					memberReg.setCardId("00000001");
				}else {
					//不是第一个会员，则获取最大的会员卡号
					String cardIdMaxOldStr=memberList.get(memberList.size()-1).getCardId();
					//将获取的最大会员号转换为int类型，再+1，得到新的会员卡号
					int cardIdInt=Integer.parseInt(cardIdMaxOldStr)+1;
					//再将新卡号转换为string类型
					String cardId=Integer.toString(cardIdInt);
					//判断新的卡号是否为8位，不足8位则在前面补0
					if(cardId.length()!=8) {
						//需要拼接的0的个数
						int add=8-cardId.length();
						StringBuffer buffer = new StringBuffer();
						//通过buffer拼接字符串
						for(int i=0;i<add;i++) {
							buffer.append("0");
						}
						//先追加0，再将新卡号追加在0之后
						buffer.append(cardId);
						//将生成的卡号转换为string类型
						cardId=buffer.toString();
					}
					//将生成的卡号添加到该会员对象
					memberReg.setCardId(cardId);
				}
				//将该会员添加到会员集合
				memberList.add(memberReg);
				System.out.println("会员注册成功！");
				System.out.println("您的会员卡号为："+memberReg.getCardId());
			}else {
				System.out.println("两次密码输入不一致，请重新输入！");
				return;
			}
		}
	}
	

	//判断会员是否存在
	private Member hasMember() {
		//先判断会员集合中是否有会员，如果没有就让用户先注册
		if(memberList.size()==0) {
			System.out.println("暂无会员信息，请先注册！");
		}else {
			//在有会员的情况下让用户输入会员卡号和密码
			Member member=new Member();
			System.out.print("请输入会员卡号：");
			member.setCardId(scanner.next());
			System.out.print("请输入密码：");
			member.setPassword(scanner.next());
			
			//循环遍历会员集合，判断是否有与之对应的会员存在
			for (Member memberIt : memberList) {
				if(memberIt.getCardId().equals(member.getCardId()) && memberIt.getPassword().equals(member.getPassword())) {
					return memberIt;
				}
			}
		}
		return null;
	}
}
